/*
    @params
    options     {Object}
        url     {String}    接口地址
        type    {String}    数据传输方式
        data    {String}    字段数据
        success {Function}  回调函数
*/ 
function ajax(options) {
    // 1. 创建
    if (window.ActiveXObject) {
        var xhr = new ActiveXObject('Microsoft.XMLHTTP')
    } else {
        var xhr = new XMLHttpRequest()
    }

    // 对象转字符串
    // { username: 'Abel', password: 123456} => username=Abel&password=123456
    var arr = []
    for (var attr in options.data) {
        arr.push(attr + '=' + options.data[attr])
    }
    var str = arr.join('&')
    // 清除缓存
    var t = Math.random() + ''
    str += `&t=` + t.slice(2)

    // 设置默认值
    options.type = options.type || 'get'

    if (options.type.toUpperCase() === 'GET') {
        // 2. 连接
        xhr.open('GET', options.url + '?' + str, true)
        // 3. 发送
        xhr.send()
    } else {
        // 2. 连接
        xhr.open('POST', options.url, true)
        // 设置请求头
        xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
        // 3. 发送
        xhr.send(str)
    }

    // 接收
    // xhr.onload = function () {
    //     options.success && options.success(xhr.responseText)
    // }
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                options.success && options.success(xhr.responseText)
            } else {
                options.error && options.error(xhr.status)
            }
        }
    }
}

function pAjax(options) {
    return new Promise(function (resolve, reject) {
        ajax({
            url: options.url,
            type: options.type,
            data: options.data,
            success (res) {
                resolve(res)
            },
            error (err) {
                reject(err)
            }
        })
    })
}